home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1985-03-31 | 9.4 KB | 300 lines |
- 10 ' CHECKBOOK PROGRAM
- 20 ' THIS PROGRAM WILL PROCESS MULTIPLE ACCOUNTS (WITH THE LIMIT CURRENTLY SET TO 5).
- 30 KEY OFF
- 31 SCREEN 0
- 32 WIDTH 80
- 40 CLEAR 4000 'RESERVE STRING SPACE
- 50 DEFDBL A
- 60 MN=150 'CHECKS PER MONTH
- 70 MA=5 'MAX ACCOUNTS
- 80 DIM CR$(MN,MA),AB(MA),AN(MA) 'CHK RES, ACCT. BAL.,ACCT #
- 90 DIM CN(MA),NU$(25),MO$(12) 'CHK NOS, AMOUNTS, MONTHS
- 100 '---------------------------------------------------------------------------
- 110 'OPEN FILES, PROCESS DATE
- 120 REM
- 130 CLS
- 140 T$="CHEKBOOK -- A CHECK ACCOUNTING PROGRAM"
- 150 PRINT TAB(32-(LEN(T$)/2))T$
- 160 PRINT:PRINT "SYSTEM INITIALIZATION IN PROCESS,PLEASE WAIT"
- 170 ON ERROR GOTO 250
- 180 OPEN "I",1,"CRF/DAT": ON ERROR GOTO 0
- 190 FOR I=1 TO MA: INPUT #1,AN(I) : NEXT I
- 200 FOR I=1 TO MA : INPUT #1,AB(I) : NEXT I
- 210 FOR I=1 TO MA ; INPUT #1,CN(I) : NEXT I
- 220 IF EOF(1) THEN CLOSE: GOTO 300
- 230 INPUT #1,I,J : LINE INPUT #1,CR$(I,J)
- 240 GOTO 220
- 250 PRINT"ERROR, CHECK REGISTER FILE NOT FOUND.FILE WILL BE CREATED!"
- 260 PRINT "HIT ENTER TO CONTINUE"
- 270 A$=INKEY$ : IF A$="" GOTO 270 ELSE IF ASC(A$)<>13 GOTO 270
- 280 RESUME 290
- 290 ON ERROR GOTO 0
- 300 DT$=LEFT$(DATE$,2)+"/"+MID$ (DATE$,4,2)+"/"+RIGHT$(DATE$,2) : GOSUB 2510
- 310 IF VAL(DT$)<>0 GOTO 340
- 320 LINE INPUT "ENTER TODAY'S DATE (MM.DD.YY): ";DT$
- 330 GOTO 310
- 340 REM -------------------------------------------------------------------
- 350 REM DISPLAY MENU,GET AND VALIDATE OPTIONS
- 360 REM
- 370 CLS
- 380 PRINT STRING$(24,"-")"CHEKBOOK MENU "STRING$(25,"-")
- 390 PRINT:PRINT
- 400 PRINT" 1 -- POST POST A HAND WRITTEN CHECK"
- 410 PRINT" 2 -- WRITE WRITE A CHECK"
- 420 PRINT" 3 -- STATEMENT GENERATE THE CHECK STATEMENTS"
- 430 PRINT" 4 -- SETUP SETUP A NEW ACCOUNT"
- 440 PRINT" 5 -- DEPOSIT POST A DEPOSIT TO ACCOUNT"
- 450 PRINT" 6 -- PURGE PURGE CURRENT MONTH'S CRF"
- 460 PRINT" 7 -- END TERMINATE THE PROGRAM"
- 470 LOCATE 3,57 : PRINT DT$;
- 480 LOCATE 4,57 : PRINT RIGHT$(TIME$,8);
- 490 LOCATE 2,1 : PRINT "SELECT OPTION===> ";: LOCATE ,,1
- 500 A$=INKEY$ : IF A$="" GOTO 500
- 510 PRINTA$; : LOCATE ,,0 : OP=VAL(A$)
- 520 IF OP>=1 AND OP <=7 GOTO 550
- 530 LOCATE 1,49 : PRINT "INVALID OPTION";
- 540 GOTO 490
- 550 ON OP GOSUB 940, 1240, 1300, 1860, 2070, 2810, 2430
- 560 GOTO 370
- 570 REM-----------------------------------------------------------------------
- 580 REM COMMON CHECK DATA INPUT ROUTINE
- 590 REM
- 600 FOR I=3 TO 16:LOCATE I,1: PRINT STRING$(64," "):NEXT I
- 610 LOCATE 3,1
- 620 CD$(1)=" ACCOUNT:"+STRING$(15,CHR$(95))
- 630 CD$(2)=" WRITTEN TO:"+STRING$(25,CHR$(95))
- 640 CD$(3)=" CHECK AMOUNT:$"+STRING$(7,CHR$(95))
- 650 CD$(4)=" NOTES: "+STRING$(25,CHR$(95))
- 660 DX$=STRING$(1,CHR$(95)): DX$=DX$+"/"+DX$+"/"+DX$
- 670 CD$(5)=" DATE WRITTEN: "+DX$
- 680 CD$(6)=" CHECK NUMBER: "+STRING$(7,CHR$(95))
- 690 CN=-1
- 700 FOR I=1 TO 4: PRINT CD$(I): NEXT I
- 710 IF CC=1 THEN PRINT CD$(5) : PRINT CD$(6)
- 720 LOCATE 3,15,1 : GOSUB 840 : AC=VAL(IX$)
- 730 LOCATE 4,18,1 : GOSUB 840 : WT$=IX$
- 740 LOCATE 5,20,1 : GOSUB 840 : AM=VAL(IX$)
- 750 LOCATE 6,13,1 : GOSUB 840 : NT$=IX$
- 760 IF CC<>1 GOTO 800
- 770 LOCATE 7,20,1 : GOSUB 840 : DW$=IX$
- 780 LOCATE 8,20,1 : GOSUB 840 : CN=VAL(IX$)
- 790 PRINT
- 800 LOCATE 9,1 : INPUT "is this correct";AN$
- 810 IF AN$="NO" OR AN$="N" GOTO 600
- 820 IF AN$<>"YES" AND AN$<>"Y" GOTO 800
- 830 FOR I=9 TO 16 :LOCATE I,1 : PRINT STRING$(64," "): NEXT I : LOCATE 9,1 : RETURN
- 840 IX$="" :A$=INKEY$
- 850 A$=INKEY$ : IF A$="" THEN 850 ELSE IF ASC(A$)<>13 AND ASC(A$)<>0 AND ASC(A$)<>8 THEN PRINT A$;
- 860 IF ASC(A$)>31 THEN IX$=IX$+A$ : GOTO 850
- 870 IF ASC(A$)=8 THEN IF LEN(IX$)>0 THEN IX$= LEFT$(IX$,LEN(IX$)-1) : PRINT-CHR$(2); : GOTO 850
- 880 IF ASC(A$)=24 THEN PRINT " "; : FOR I=1 TO LEN(IX$) : PRINT CHR$(29)+" "=CHR$(29); : NEXT I : IX$="": GOTO 850
- 890 IF ASC(A$)=13 THEN LOCATE ,,0 : RETURN
- 900 GOTO 850
- 910 REM-----------------------------------------------------------------------
- 920 REM POST A HAND WRITTEN CHECK HERE
- 930 REM
- 940 IF AN(1)=0 THEN GOSUB 1860
- 950 CLS
- 960 PRINT STRING$(20,"-")" CHECK POSTING ROUTINE "STRING$(21,"-")
- 970 CC=1 : GOSUB 600
- 980 FOR I=1 TO MA : IF AC=AN(I) GOTO 1020 ELSE NEXT I
- 990 PRINT"ERROR, ACCOUNT NOT FOUND, RE-ENTER,"
- 1000 INPUT "ACCOUNT NUMBER";AC
- 1010 GOTO 980
- 1020 FOR J=1 TO MN : IF CR$(J,I)="" GOTO 1050 ELSE NEXT J
- 1030 PRINT"ERROR, CHECK REGISTER IS FULL. HIT ENTER TO CONTINUE."
- 1040 GOTO 1190
- 1050 CR$(J,I)=WT$+CHR$(255)+STR$(AM)+CHR$(255)+NT$+CHR$(255)
- 1060 IF DW$<>"" THEN CR$(J,I)=CR$(J,I)+DW$ ELSE CR$(J,I)=CR$(J,I)+LEFT$(TIME$,8)
- 1070 IF CC<>0 GOTO 1130
- 1080 IF (AB(I)-AM)>=0 GOTO 1130 ELSE PRINT "BALANCE WILL GO NEGATIVE."
- 1090 PRINT"WRITE CHECK ANYWAY"
- 1100 IF AN$="YES" OR AN$="Y" GOTO 1130
- 1110 IF AN$="NO" OR AN$="N" THEN CR$(J,I)="" : RETURN
- 1120 GOTO 1090
- 1130 AB(I)=AB(I)-AM
- 1140 IF CN=-1 THEN CN=CN(I) : CN(I)=CN(I)+1
- 1150 CR$(J,I)=STR$(CN)+CHR$(255)+CR$(J,I)
- 1160 IF AB(I)<0 THEN PRINT "BALANCE IS NOW NEGATIVE."
- 1170 IF OP<>1 THEN RETURN
- 1180 PRINT"ACCOUNT POSTED. HIT ENTER TO CONTINUE."
- 1190 A$=INKEY$ : IF A$="" GOTO 1190 ELSE IF ASC(A$)<>13 GOTO 1190
- 1200 RETURN
- 1210 REM--------------------------------------------------------------------
- 1220 REM WRITE A CHECK ROUTINE
- 1230 REM
- 1240 IF AN(1)=0 THEN GOSUB 1860
- 1250 CLS
- 1260 PRINTSTRING$(20,"-")" CHECK WRITING ROUTINE " STRING$(21,"-")
- 1270 CC=0 : GOSUB 600 : GOSUB 980
- 1280 IF AN$<>"N" AND AN$<>"NO" THEN GOSUB 2550
- 1290 RETURN
- 1300 REM---------------------------------------------------------------------
- 1310 REM PRINT CHECK REGISTER
- 1320 REM
- 1330 CLS
- 1340 PRINT STRING$(21,"-")" PRINT CHECK REGISTER "STRING$(21,"-")
- 1350 PRINT
- 1360 HD$="CHK # TO WHOM WRITTEN AMOUNT
- 1370 F$="***** \ \$**,***.**\ \ \ \"
- 1380 D$=" \ \$**,***.** \ \ \ \"
- 1390 INPUT "FOR ALL ACCOUNTS";AN$
- 1400 IF AN$="YES" OR AN$="Y" GOTO 1460
- 1410 IF AN$<>"NO" AND AN$<>"N" GOTO 1390
- 1420 INPUT "ACCOUNT";AC
- 1430 FOR I=1 TO MA : IF AN(I)=AC GOTO 1470 ELSE NEXT I
- 1440 PRINT "ERROR, ACCOUNT NOT FOUND. RE-ENTER."
- 1450 GOTO 1420
- 1460 I=1
- 1470 PRINT "ACCOUNT NUMBER: "AN(I);TAB(59);
- 1480 PRINT "REPORT DATE: ";LEFT$(TIME$,8)
- 1490 PRINT " "
- 1500 PRINT "CHECK REGISTER:"
- 1510 PRINT " "
- 1520 PRINT JD$
- 1530 PRINT" "
- 1540 CA=0 : DP=0
- 1550 J=1
- 1560 IF CR$(J,I)="" GOTO 1720
- 1570 CR$=CR$(J,I)
- 1580 FOR K=1 TO 4
- 1590 L=INSTR(CR$,CHR$(255))
- 1600 PT$(K)=LEFT$(CR$,L-1)
- 1610 CR$=RIGHT$(CR$,LEN(CR$)-L)
- 1620 NEXT K
- 1630 CN=VAL(PT$(1))
- 1640 AM=VAL(PT$(3))
- 1650 IF CN>=0 THEN CA=CA+AM : GOTO 1690
- 1660 PRINT USING D$;PT$(2),AM,PT$(4),CR$
- 1670 DP=DP+AM
- 1680 GOTO 1700
- 1690 PRINT USING F$;CN,PT$(2),AM,PT$(4),CR$
- 1700 J=J+1
- 1710 GOTO 1560
- 1720 PRINT " "
- 1730 PRINT USING "BEGINNING BALANCE: $**,***.**";AB(I)=CA-DP
- 1740 PRINT USING "DEPOSITS: $**,***.**";DP
- 1750 PRINT USING "TOTAL CHECKS: $**,***.**";CA
- 1760 PRINT USING "CURRENT BALANCE: $**,***.**";AB(I)
- 1770 IF AN$="NO" OR AN$="N" GOTO 1820
- 1780 I=I+1
- 1790 PRINT " "
- 1800 PRINT " "
- 1810 IF I<MA AND AN(I)<>0 GOTO 1470
- 1820 IF OP<>3 THEN RETURN
- 1830 PRINT "HIT ENTER TO CONTINUE"
- 1840 A$=INKEY$ : IF A$="" GOTO 1840 ELSE IF ASC(A$)<>13 GOTO 1840
- 1850 RETURN
- 1860 REM--------------------------------------------------------------------
- 1870 REM SET-UP AN ACCOUNT
- 1880 REM
- 1890 CLS
- 1900 PRINT STRING$(20,"-")" ACCOUNT SET-UP ROUTINE "STRING$(20,"-")
- 1910 PRINT
- 1920 IF AN(1)=0 THEN PRINT "NO ACCOUNTS SET-UP YET."
- 1930 PRINT
- 1940 FOR I=1 TO MA : IF AN(I)=0 GOTO 1970 ELSE NEXT I
- 1950 PRINT "ERROR, ACCOUNT RESGISTER FULL"
- 1960 RETURN
- 1970 INPUT "ACCOUNT NUMBER";AN(I)
- 1980 INPUT "STARTING ACCOUNT BALANCE";AB(I)
- 1990 INPUT "NEXT CHECK NUMBER FOR THIS ACCOUNT";CN(I)
- 2000 PRINT
- 2010 PRINT "ACCOUNT ESTABLISHED. HIT ENTER TO CONTINUE."
- 2020 A$=INKEY$ : IF A$="" GOTO 2020 ELSE IF ASC(A$)<>13 GOTO 2020
- 2030 RETURN
- 2040 REM-----------------------------------------------------------------------
- 2050 REM POST A DEPOSIT
- 2060 REM
- 2070 CLS
- 2080 PRINT STRING$(24,"-")" POST A DEPOSIT "STRING$(24,"-")
- 2090 PRINT
- 2100 INPUT "ACCOUNT NUBMER";AC
- 2110 FOR I=1 TO MA : IF AN(I)=AC GOTO 2140 ELSE NEXT I
- 2120 PRINT "ERROR,ACCOUNT NUMBER NOT FOUND. RE-ENTER"
- 2130 GOTO 2100
- 2140 INPUT "DEPOSIT AMOUNT";DA
- 2150 FOR J=1 TO MN : IF CR$(J,I)="" GOTO 2190 ELSE NEXT J
- 2160 PRINT"ERROR, CHECK REGISTER FULL. HIT ENTER TO CONTINUE"
- 2170 A$=INKEY$ : IF A$="" GOTO 2170 ELSE IF ASC(A$)<>13 GOTO 2170
- 2180 GOTO 2230
- 2190 CR$(J,I)="-1"+CHR$(255)+ LEFT$(TIME$,8)
- 2200 AB(I)=AB(I)+DA
- 2210 PRINT"DEPOSIT POSTED. HIT ENTER TO CONTINUE."
- 2220 A$=INKEY$ :IF A$="" GOTO 2220 ELSE IF ASC(A$)<>13 GOTO 2220
- 2230 RETURN
- 2240 REM----------------------------------------------------------------
- 2250 REM TERMINATION PROCESSING
- 2260 REM
- 2270 CLS
- 2280 PRINT STRING$(21,"-")" TERMINATION PROCESSING "STRING$(22,"-")
- 2290 PRINT
- 2300 PRINT "WRITING CHECK REGISTER FILE."
- 2310 OPEN "O",1,"CRF/DAT"
- 2320 FOR I=1 TO MA : PRINT #1,AN(I) : NEXT I
- 2330 FOR I=1 TO MA : PRINT #1,AB(I) : NEXT I
- 2340 FOR I=1 TO MA : PRINT #1,CN(I) : NEXT I
- 2350 FOR I=1 TO MA
- 2360 FOR J=1 TO MN
- 2370 IF CR$(J,I)="" GOTO 2400
- 2380 PRINT #1,J,I,CR$(J,I)
- 2390 NEXT J
- 2400 NEXT I
- 2410 CLOSE
- 2420 PRINT "PROGRAM ENDED."
- 2430 RUN"MENU.BAT"
- 2440 REM-----------------------------------------------------------------------
- 2450 REM FORMAT AND PRINT CHECK (DATA)
- 2460 REM
- 2470 DATA ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN
- 2480 DATA ELEVEN, TWELVE, THIRTEEN, FOURTEEN, FIFTEEN, TWENTY, THIRTY
- 2490 DATA FORTY, FIFTY, SIXTY,SEVENTY, EIGHTY, NINETY
- 2500 DATA JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
- 2510 FOR I=1 TO 23 : READ NU$(I) : NEXT I : FOR I=1 TO 12 : READ MO$(I) : NEXT I : RETURN
- 2520 REM-----------------------------------------------------------------------
- 2530 REM FORMAT AND PRINT CHECK
- 2540 REM
- 2550 WD$=""
- 2560 A1=INT(AM/1000)
- 2570 A2=INT((AM-A1*1000)/100)
- 2580 A3=INT(AM-(A1*1000+A2*100))
- 2590 A4=AM-INT(AM)
- 2600 IF A1<>0 THEN WD$=NU$(A1)+"THOUSAND"
- 2610 IF A2<> 0 THEN WD$=WD$+NU$(A2)+" HUNDRED "
- 2620 IF A3=0 GOTO 2700
- 2630 IF A3<16 THEN WD$=WD$+NU$(A3) : GOTO 2700
- 2640 IF A3<20 GOTO 2690
- 2650 A5=INT(A3/10) : A3=A3-10*A5
- 2660 IF A3<>0 GOTO 2680
- 2670 WD$=WD$=NU$(A5+14): GOTO 2700
- 2680 WD$=WD$ +NU$(A5+14)+"-"+NU$(A3) : GOTO 2700
- 2690 WD$=WD$+NU$(A3-10)+"TEEN"
- 2700 WD$=WD$+" AND"+STR$(INT(A4*100))+"/100'S"
- 2710 PRINT TAB(41);MO$(VAL(TIME$));" ";MID$ (TIME$,4,2);",";TAB(56);MID$(TIME$,7,2)
- 2720 PRINT " "
- 2730 PRINT TAB(10);WT$;TAB(58); : PRINT USING "**,***.**";AM
- 2740 PRINT TAB(10);WT$;TAB(58); : PRINT USING "**,***.**";AM
- 2750 PRINT " "
- 2760 PRINT WD$
- 2770 PRINT " "
- 2780 PRINT WD$
- 2790 PRINT TAB(5);NT$
- 2800 RETURN
- 2810 REM ----------------------------------------------------------------
- 2820 REM PURGE CURRENT CRF
- 2830 REM
- 2840 CLS
- 2850 PRINT STRING$(22,"-")" PURGE CURRENT CRF "STRING$(23,"-")
- 2860 GOSUB 1360
- 2870 IF AN$="YES" OR AN$="Y" GOTO 2890
- 2880 FOR I=1 TO MA : IF AN(I)=AC GOTO 2900 ELSE NEXT I
- 2890 FOR I=T TO MA
- 2900 FOR J=1 TO NM
- 2910 CR$(J,I)=""
- 2920 NEXT J
- 2930 IF AN$="NO" OR AN$="N" GOTO 2950
- 2940 NEXT I
- 2950 PRINT "CRF PURGED. HIT ENTER TO CONTINUE."
- 2960 A$=INKEY$ : IF A$="" GOTO 2960 ELSE IF ASC(A$)<>13 GOTO 2960
- 2970 RETURN
-